0%

智能硬件系统开发之语音通信

智能硬件系统开发之语音通信

题目 智能硬件系统开发之语音通信
主要内容 学习和掌握构建基于嵌入式硬件平台和嵌入式 Linux 软件开发环境的方法,掌握嵌入式音频应用程序设计与开发手段,在此基础上通过 Socket 网络编程实现基于嵌入式 IP 网络的双向语音通信。
设计要求 基本要求: 1、在嵌入式系统环境下,实现本地语音文件录放(WAV 格式); 2、通过 Socket 网络编程实现 IP 网络双向语音传输。 扩展要求:通过调用百度、科大讯飞等语音识别库实现简单命令词识别功能,实现语音数据的压缩编码,G.711、G.729 等格式均可。也可以自行设计其它扩展功能。
主要仪器设备 1、嵌入式开发系统 1 套;2、计算机 1 台,安装 Ubuntu 操作系统及 arm-linux 交叉编译工具;3、耳麦 1 个;4、网线 2 根,IP 地址 2 个

linux 下的嵌入式开发工具

串口调试

查看串口:ls -l /dev/tty*

串口调试工具:picocom putty

使用时需要 root 权限

picocom

查看帮助:picocom -h

使用方法如:picocom -b 115200 /dev/ttyUSB0

一、设计内容

学习和掌握构建基于嵌入式硬件平台和嵌入式 Linux 软件开发环境的方法,掌握嵌入式音频应用程序设计与开发手段,在此基础上通过 Socket 网络编程实现基于嵌入式 IP 网络的双向语音通信。

二、设计要求

1、基本要求

(1)在嵌入式系统环境下,实现本地语音文件录放(WAV 格式);

(2)通过 Socket 网络编程实现 IP 网络双向语音传输。

2、扩展要求

通过调用百度、科大讯飞等语音识别库实现简单命令词识别功能,实现语音数据的压缩编码。也可以自行设计其它扩展功能。

三、主要仪器设备

1、嵌入式开发系统 1 套
2、计算机 1 台,安装 Ubuntu 操作系统及 arm-linux 交叉编译工具
3、耳麦 1 个
4、网线 2 根,IP 地址 2 个

步骤

(一).在嵌入式系统环境下,实现本地语音文件录放(WAV 格式)

(1)向 arm 开发板移植 ALSA 库

1.下载库文件与工具

alsa-lib-1.0.23.tar.bz2

alsa-utils-1.0.23.tar.bz2

将文件移到 Ubuntu 上

解压 alsa-lib-1.0.23.tar.bz2,进入解压所得目录

2.使用命令

1
./configure --host=arm-none-linux-gnueabi --prefix=/opt/arm-alsa

–host 参数指定了交叉编译器为"arm-none-linux-gnueabi、",

–prefix 参数指定了 alsa-lib 的目标安装目录

3.使用命令

1
2
3
make

sudo make install

安装库

4.解压 alsa-utils-1.0.23.tar.bz2,进入解压所得目录

5.使用命令

1
./configure --host=arm-none-linux-gnueabi --prefix=/opt/arm-alsa --with-alsa-inc-prefix=/opt/arm-alsa/include --with-alsa-prefix=/opt/arm-alsa/lib

–disable-alsamixer –disable-xmlto

其中–with-alsa-inc-prefix 和–with-alsa-prefix 分别指定了交叉编译 util 应用所需要的 alsa-lib 的头文件和库文件;

–disable-alsamixer 表示不编译生成 alsamixer 这个应用程序,

6.使用命令

1
2
3
touch alsaconf/po/t-ja.gmo

touch alsaconf/po/t-ru.gmo

7.使用命令

1
2
3
make

sudo make install

安装完后进入安装目录可看到以下文件

1

将该目录全部拷贝到/source/rootfs 下,移植 ALSA 库完成。

(2)编辑语音录制与播放程序

一个典型的音频程序应该具有以下结构:打开音频设备、为设备设置读写参数、向音频设备读/写音频数据、关闭设备。Alsa 库为我们实现这些操作提供了丰富的接口。

播放程序代码如下:



录制音频程序如下



(3)交叉编译

使用交叉编译工具编译程序

将可执行文件移动到开发板目录下

(4)运行程序

在 putty 窗口中分别运行音频录制与播放程序

1.通过 Socket 网络编程实现 IP 网络双向语音传输

socket 通信其实是有两种方式:TCP 和 UDP 过程。

基于 TCP 的 socket 通信服务端的具体步骤:(1)创建 ServerSocket 对象,绑定监听端口。(2)通过 accept()方法监听客户端请求(3)连接建立后,通过输入流读取客户端的数据(4)通过输出流,向客户端回应信息

基于 TCP 的 socket 通信客户端的步骤:(1)创建 Socket 并指定端口(2)通过输出流向服务端发送一个请求(3)等待服务端的回应 获取输入流,读取客户端信息(将字节流转化为字符流),并保存在缓冲区中(4)关闭资源

  1. 编写服务端** 程序**


编写客户端程序


  1. 编译

编译服务端程序,将客户端程序进行交叉编译后移植到开发板上

4.** 运行程序**

查看 IP

打开服务器

在开发板中运行客户端,ip 地址为服务器地址

程序执行,客户端向服务器发送音频数据。之后可以看到服务器端收到了音频数据,并保存到本地。

五、总结

在嵌入式系统环境下,实现本地语音文件录放,通过 Socket 网络编程实现 IP 网络双向语音传输。本地语音文件录放的实现首先是先将 alsa 库通过交叉编译后移植到开发板上,接着通过调用 alsa 库的函数来实现录制与播放声音程序的编写,程序编写完后,通过交叉编译生成在开发板上的可执行文件。IP 网络双向语音传输实现是通过 socket 编程将录制的音频数据通过网络传输给对方,将数据保存后即可播放。